// 最佳通用类型
let x = [0, 1, null];

// 如果没有找到最佳通用类型的话，类型推论的结果是空对象类型，{}
// let zoo = [new Rhino(), new Elephant(), new Snake()];
// let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];

// 上下文类型
// 如果函数表达式不是在上下文类型的位置， mouseEvent参数的类型需要指定为any，这样也不会报错了
// window.onmousedown = function(mouseEvent) {
//     console.log(mouseEvent.buton);  //<- Error
// };

window.onmousedown = function(mouseEvent: any) {
    console.log(mouseEvent.buton);  //<- Now, no error is given
};